//
// Created by LiuYou on 2021/10/21.
//

#include <iostream>
#include <unistd.h>
#include <sys/wait.h>
#include <cstring>
#include <glob.h>


static void prompt() {
    printf( "MyShell-0.1$ " );
}


static void parse(char* lineBuf, glob_t* globRes) {
    // strtok, strtok_r - extract tokens from strings
    // 根据使用者所规定的分隔符 delim, 把 str 字符串打散成若干个小字符串。
    // 所以这个函数理所应当放在一个循环当中。
    // 和 strtok() 相似的另外一个函数是 strsep() 。
    // char *strtok(char *str, const char *delim);

    // strsep - extract token from string
    // char *strsep(char **stringp, const char *delim);

    int i = 0;

    while (true) {
        char* tokenStr = strsep( &lineBuf, " \t\n" );
        if (tokenStr == nullptr) {
            break;
        }
        if (tokenStr[0] == '\0') {
            continue;
        }
        glob( tokenStr, GLOB_NOCHECK | GLOB_APPEND * i, nullptr, globRes );
        i = 1;
    }
}


/**
 * @brief MyShell没有完成。先不完成了。
 */
int main(int argc, char** argv) {
    // todo 笔记: getline();函数的第一个参数要的是一个一级指针的地址！
    char* lineBuf = nullptr;
    size_t lineBufSize = 0;
    glob_t globRes;

    while (true) {
        prompt();
        if (getline( &lineBuf, &lineBufSize, stdin ) < 0) {
            break;
        }
        parse( lineBuf, &globRes );
        if (false/*如果是内部命令*/) {

        }
            /*如果是外部命令*/
        else {
            pid_t childPid = fork();
            if (childPid < 0) {
                perror( "fork()" );
                exit( 1 );
            }
            if (childPid == 0) {
//                exec();
//                perror();
                exit( 1 );
            }
//            wait();
        }
    }

    return 0;
}
